import router from '@/router'
import axios, { AxiosRequestConfig } from 'axios'
import { ElMessage, ElMessageBox } from 'element-plus'
import localCache from './localCache'

const server = axios.create({
  baseURL: '/lulu',
  timeout: 5000
})

// 添加请求拦截器
server.interceptors.request.use(function (config) {
  const userInfo = localCache.getCache('USERINFO')
  if (userInfo) {
    config.headers!.Authorization = userInfo.token
  }
  // 在发送请求之前做些什么
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
server.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  const msg = response.data.meta.msg
  const status = response.data.meta.status
  if (msg === '无效token' && status === 400) {
    // ElMessage({
    //   type: 'warning',
    //   message: '登录失效请重新登录！',
    //   duration: 0
    // })

    ElMessageBox.confirm('登录失效是否重新登录！', '系统提醒', {
      type: 'warning',
      confirmButtonText: '确定',
      cancelButtonText: '取消'
    }).then(() => {
      router.push({
        path: '/login',
        query: {
          redirect: router.currentRoute.value.fullPath
        }
      })
    }).catch(() => {
      ElMessage({
        type: 'warning',
        message: '登录失效请重新登录！'
      })
    })
  }
  return response
}, function (error) {
  // 对响应错误做点什么
  return Promise.reject(error)
})

export default <T=any>(config:AxiosRequestConfig) => {
  return server(config).then(res => {
    return res.data as T
  })
}
